# 创建时间：2025/5/4 星期日 20:59
# 创建人：李德才


""" 1.当我们使用 from 时，程序胡自动使用 type 来创建一个类对象 """
from 元类.元类的理解 import Student  # 这里已经创建了一个类对象

student = Student("封于修", 35)  # 这里创建了一个实例对象
print(student)

print(type(student))  # <class '__main__.Student'>
print(type(Student))  # <class 'type'> # Student 是一个类，这个类的类型是 type
print(type(123))  # <class 'int'>
print(type("123"))  # <class 'str'>

""" 2.使用 type 创建一个类 """


def say(self, x):
    return "hello %s" % x


Person = type("Person", (object,), dict(name="封于修", age=35, say=say))  # 这里创建了一个类对象
p = Person()
print(p)
print(p.name)
print(p.age)
print(p.say("hello"))
print(type(p))
print(type(Person))

""" 3.使用 meta_class 创建一个类 """


class MyMetaClass(type):
    """ cls 是 MyMetaClass，name 是 Person，bases 是 (object,)，attrs 是 dict(name="封于修", age=35, say=say) """

    def __new__(cls, name, bases, attrs):
        print("__new__cls:", cls)
        print("__new__name:", name)  # 创建的类的名字
        attrs["name"] = "封于修"
        attrs["age"] = 35
        attrs["say"] = say
        return type.__new__(cls, name, bases, attrs)


class Person(metaclass=MyMetaClass):  # 这里创建了一个类对象
    """ 可以不写，用于为新创建的类添加属性和方法 """

    def __init__(self):
        self.age = "100"
        self.name = "张三丰"


p = Person()
print("MyMetaClass", p.name)
print("MyMetaClass", p.age)
